package sort;

/*
    冒泡排序
    思路：
        每次把 最大或最小 的一个放到 最后或最前 面
    优化：
        设置一个哨兵，如果有某一次冒泡时，一次都没有交换顺序，那么排序就完成了
 */
public class BubbleSort {

    public static void main(String[] args) {
        Util.testFunction10000(BubbleSort::bubbleSort);
    }

    public static int[] bubbleSort(int[] array) {
        boolean flag = true;

        int len = array.length;

        for (int i = 0; i < len; i++) {
            flag = true;
            for (int j = 0; j < len - 1; j++) {
                if (array[j] > array[j + 1]) {
                    Util.swap(array, j, j + 1);
                    flag = false;
                }
            }
            if (flag) {    // 如果某次冒泡没有交换的发生，说明排好序了
                break;
            }
        }

        return array;
    }

}
